<!DOCTYPE html>
<html>
	<head>
		<title>Soter代码规范</title>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<script src="js/inc.js"></script>
	</head>
	<body>
		<fieldset>
			<legend>Soter代码规范</legend>
			<ol>
				<li><b class="text_strong">Soter使用PSR-0命名规范同时兼容PSR-4命名规范。</b></li>
				<li>变量名，方法名，函数名，参数名，采取驼峰命名方式。比如userId</li>
				<li>命名采用英文完整单词不能缩写，取最接近功能的单词。比如：userScoreLevel</li>
				<li>常量名，静态变量名，采取全部大写加下划线分割多个单词的命名方式。比如：MAX_ID</li>
				<li><b>使用PSR-0命名规范同时:</b><br/>
					<b class="text_strong">classes类目录下的：文件名、类名、文件的位置，三者是对应的，大小写敏感。</b><br>
					1.比如有文件：classes/Controller/User.php<br>
					那么User.php文件里面的类名就应该是：Controller_User<br>
					2.比如有文件：classes/Controller/Vip/User.php<br>
					那么User.php文件里面的类名F就应该是：Controller_Vip_User,也就是下划线代表着文件夹的分隔符。<br>
					3.比如有文件：classes/Model/User.php<br>
					那么User.php文件里面的类名就应该是：Model_User<br>
					4.比如有文件：classes/MyLib/User.php<br>
					那么User.php文件里面的类名就应该是：MyLib_User<br>
				</li>
				<li><b class="text_strong">类库目录library/classes下的文件名和类名是对应的。</b><br>
					比如有文件：library/classes/User.php<br>
					那么User.php文件里面的类名就应该是：User<br>
				</li>
				<li><b>使用PSR-4命名规范同时:</b><br/>
					<p>
						术语「类」是一个泛称；它包含类，接口，traits 以及其他类似的结构；
						<br/>完全限定类名应该类似如下范例：
						<br/>\< NamespaceName >(\< SubNamespaceNames >)*\< ClassName >
						<br/>完全限定类名必须有一个顶级命名空间（Vendor Name）；
						<br/>完全限定类名可以有多个子命名空间；
						<br/>完全限定类名应该有一个终止类名；
						<br/>下划线在完全限定类名中是没有特殊含义的；
						<br/>字母在完全限定类名中可以是任何大小写的组合；
						<br/>所有类名必须以大小写敏感的方式引用；
						<br/>当从完全限定类名载入文件时：
						<br/>在完全限定类名中，连续的一个或几个子命名空间构成的命名空间前缀（不包括顶级命名空间的分隔符），至少对应着至少一个基础目录。
						<br/>在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录，其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配；
						<br/>终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配；
					</p>
					<b class="text_strong">classes类目录下的：文件名、类名、文件的位置，三者是对应的，大小写敏感。</b><br>
					1.比如有文件：classes/Controller/User.php<br>
					那么User.php文件内容应该是：
					<pre class="brush:php">
						&lt;?php
							namespace Controller;

							class User extends \Soter_Controller {

								public function do_echo() {
									\Sr::dump(__CLASS__);
								}

							}
												
					</pre>
					2.比如有文件：classes/Controller/Vip/User.php<br>
					User类是：\Controller\Vip\User ; User.php类文件内容应该是如下:<br>
					<pre class="brush:php">
						&lt;?php
							namespace Controller\Vip;

							class User extends \Soter_Controller {

								public function do_echo() {
									\Sr::dump(__CLASS__);
								}

							}
												
					</pre>
					3.比如有文件：classes/Model/User.php<br>
					User类是：\Model\User ; User.php类文件内容应该是如下:<br>
					<pre class="brush:php">
						&lt;?php
							namespace Model;

							class User extends \Soter_Model {

								public function demo() {
									return "demo";
								}

							}
												
					</pre>
					4.比如有文件：classes/MyLib/User.php<br>
					User类是：\MyLib\User ; User.php类文件内容应该是如下:<br>
					<pre class="brush:php">
						&lt;?php
							namespace MyLib;

							class User {

								public function demo() {
									return "demo";
								}

							}
					</pre>
				</li>
				<li>代码采用tab缩进，一个tab占用8个英文半角空格宽度</li>
			</ol>
		</fieldset>
		<script src="js/inc.foot.js"></script>
	</body>
</html>
